/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controladorfuzzy;

import java.util.ArrayList;

/**
 *
 * @author Administrador
 */
public class ConjuntoFuzzy {

    Pertinencia pertinencia = new Pertinencia();
    ArrayList<Integer> pontos = new ArrayList<Integer>();
    ArrayList<String> termos = new ArrayList<String>();
    double primeiraPertinencia;
    String primeiroValor;
    double segundaPertinencia;
    String segundoValor;

    public ConjuntoFuzzy(ArrayList<Integer> pontosDefinidos, ArrayList<String> termosDefinidos) {
        this.pontos = pontosDefinidos;
        this.termos = termosDefinidos;
    }

    public double getPrimeiraPertinencia() {
        return primeiraPertinencia;
    }

    public void setPrimeiraPertinencia(double primeiraPertinencia) {
        this.primeiraPertinencia = primeiraPertinencia;
    }

    public String getPrimeiroValor() {
        return primeiroValor;
    }

    public void setPrimeiroValor(String primeiroValor) {
        this.primeiroValor = primeiroValor;
    }

    public double getSegundaPertinencia() {
        return segundaPertinencia;
    }

    public void setSegundaPertinencia(double segundaPertinencia) {
        this.segundaPertinencia = segundaPertinencia;
    }

    public String getSegundoValor() {
        return segundoValor;
    }

    public void setSegundoValor(String segundoValor) {
        this.segundoValor = segundoValor;
    }

    public void definirPertinencia(double valor) {
        double getPertinencia;
        if (valor <= pontos.get(0)) {
            setPrimeiraPertinencia(1);
            setPrimeiroValor(termos.get(0));

            setSegundaPertinencia(0);
            setSegundoValor(null);
        } else if (valor > pontos.get(0) & valor < pontos.get(1)) {

            getPertinencia = pertinencia.pertinenciaTrapezoidal(0, 0, pontos.get(0), pontos.get(1), valor);
            System.out.println("Primeira pertinencia: " + getPertinencia);
            setPrimeiraPertinencia(getPertinencia);
            setPrimeiroValor(termos.get(0));
            System.out.println("Primeiro valor: " + getPrimeiroValor());

            getPertinencia = pertinencia.pertinenciaTrapezoidal(pontos.get(0), pontos.get(1), pontos.get(2), pontos.get(3), valor);
            System.out.println("Segunda pertinencia: " + getPertinencia);
            setSegundaPertinencia(getPertinencia);
            setSegundoValor(termos.get(1));
            System.out.println("Segundo valor: " + getSegundoValor());
        } else if (valor >= pontos.get(1) & valor <= pontos.get(2)) {
            setPrimeiraPertinencia(1);
            setPrimeiroValor(termos.get(1));

            setSegundaPertinencia(0);
            setSegundoValor(null);
        } else if (valor > pontos.get(2) & valor < pontos.get(3)) {
            getPertinencia = pertinencia.pertinenciaTrapezoidal(pontos.get(0), pontos.get(1), pontos.get(2), pontos.get(3), valor);
            setPrimeiraPertinencia(getPertinencia);
            setPrimeiroValor(termos.get(1));

            getPertinencia = pertinencia.pertinenciaTrapezoidal(pontos.get(2), pontos.get(3), 0, 0, valor);
            setSegundaPertinencia(getPertinencia);
            setSegundoValor(termos.get(2));
        } else if (valor >= pontos.get(3)) {
            setPrimeiraPertinencia(1);
            setPrimeiroValor(termos.get(2));

            setSegundaPertinencia(0);
            setSegundoValor(null);
        }
    }

    public double[] obterX(double y, String valor) {
        double[] valoresX = new double[2];
        // se velocidade for baixa
        if (valor.equals(termos.get(0))) { //Se velocidade for baixa
            valoresX[0] = 0;
            valoresX[1] = pertinencia.segundoValorX(0, 0, pontos.get(2), pontos.get(3), y);
        } else if (valor.equals(termos.get(1))) { //Se velocidade for media
            valoresX[0] = pertinencia.primeiroValorX(pontos.get(0), pontos.get(1), pontos.get(2), pontos.get(3), y);
            valoresX[1] = pertinencia.segundoValorX(pontos.get(0), pontos.get(1), pontos.get(2), pontos.get(3), y);
        } else if (valor.equals(termos.get(2))) { //Se velocidade for media
            valoresX[0] = pertinencia.primeiroValorX(pontos.get(2), pontos.get(3), 0,0, y);
            valoresX[1] = 30;
        }
        return valoresX;


    }
}
